package jcpcotizaciones.Control;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jcpcotizaciones.Modelo.Cotizacion;

/**
 * Darwin Silva Vargas
 * Viviana Figueroa Barros
 * Carlos Manota Mejía
 * Elkin Cedeño
 */

public class ControlCotizacion {
    private static Connection con;

public static int proximo(){
    try{
        String sql = "SELECT MAX(numero)+1 as Proximo FROM cotizacion";
        ManejadorBaseDatos basedatos = ManejadorBaseDatos.getInstancia();
        basedatos.conectar();
        ResultSet res = basedatos.consultar( sql );
        int prox = 0;
        if( res.next() ){
             prox =  res.getInt("Proximo");
            return prox;
        }
        else{
            return prox;
        }
    }
    catch(Exception er){
        System.out.println("Error al consultar la proxima cotizacion"); // logo
        return 0;
    }
}


public static void agregarCotizacion (Cotizacion c) throws SQLException, Exception{
    ManejadorBaseDatos mbd= ManejadorBaseDatos.getInstancia();
    mbd.conectar();
    con=mbd.getConexion();
    if (con == null ){
      throw new SQLException(" No hay conexion ");
    }
    PreparedStatement pst = null;
    try {
      pst = con.prepareStatement("Insert Into cotizacion values(?,?,?,?,?,?,?,?)");
      pst.setString(1,c.getNumero());
      pst.setString(2,c.getFecha());
      pst.setString(3,c.getHora());
      pst.setDouble(4,c.getIva());
      pst.setDouble(5,c.getSubtotal());
      pst.setDouble(6,c.getTotal());
      pst.setString(7,c.getUsuario().getCodigo());
      pst.setString(8,c.getCliente().getCodigo());
      pst.executeUpdate();
    }finally {
        if (pst != null) {
             pst.close();
        }
    }
}

public static Cotizacion BuscarCotizacion(String numero) throws SQLException{
     ResultSet rs = null;
     PreparedStatement pst = null;
     Cotizacion c = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from cotizacion where numero = ?");
         pst.setString(1, numero);
         rs = pst.executeQuery();
         while(rs.next()) {
             c = Cotizacion.load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return c;
    }
}

public static boolean ModificarCotizacion(Cotizacion c, String num) throws SQLException, Exception{
      if ( BuscarCotizacion(num) == null) {
          throw new SQLException ("Cotizacion no registrado ");
      }
      PreparedStatement pst = null;
      boolean res=false;
      try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("Update cotizacion set numero =?, fecha=?, hora =?, iva=?, subtotal=?, total=?, usuario_codusuario=?, cliente_codcliente = ? where numero = ?" );
        pst.setString(1,c.getNumero());
        pst.setString(2,c.getFecha());
        pst.setString(3,c.getHora());
        pst.setDouble(4,c.getIva());
        pst.setDouble(5,c.getSubtotal());
        pst.setDouble(6,c.getTotal());
        pst.setString(7,c.getUsuario().getCodigo());
        pst.setString(8,c.getCliente().getCodigo());
        pst.setString(9,num);
        int r= pst.executeUpdate();
        if (r != 0) {
            res = true;
        }
        } finally {
          if (pst != null) {
            pst.close();
          }
        }
       return res;
}

 public static void EliminarCotizacion(String num) throws SQLException, Exception{
     if (BuscarCotizacion(num) == null) {
        throw new SQLException("No hay elemento clave de la clase cotizacion");
     }
     PreparedStatement pst = null;
     try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("delete from cotizacion where numero = ?");
        pst.setString(1, num);
        pst.executeUpdate();
     } finally {
        if (pst != null) {
           pst.close();
        }
     }
}
}
